#ifndef HIXL_API_H
#define HIXL_API_H

#include "hccl_api.h"
#include <memory>

namespace hixl {
    using ClientHandle = void *;

    /**
     * @brief 创建Client实例
     * @param [in] server_ip 服务端的监听ipv4地址
     * @param [in] server_port 服务端的监听端口号
     * @param [in] end_point 源端点
     * @param [out] client_handle 输出的客户端句柄
     * @return 操作结果状态码
     */
    hccl::HcclResult HixlCSClientCreate(char *server_ip,
                                        uint32_t server_port,
                                        const hccl::EndPoint *end_point,
                                        ClientHandle *client_handle);

    /**
     * @brief Client连接到Server
     * @param client_handle 客户端句柄
     * @return 操作结果状态码
     */
    hccl::HcclResult HixlCSClientConnect(ClientHandle *client_handle);

    /**
     * @brief 查询客户端的连接状态
     * @param client_handle 客户端句柄
     * @param status 输出的连接状态（0=尚未完成，1=完成，其它=保留）
     * @return 操作结果状态码
     */
    hccl::HcclResult HixlCSClientGetStatus(ClientHandle client_handle,
                                           int32_t *status);

    /**
     * @brief 获取服务端共享内存信息
     * @param client_handle 客户端句柄
     * @param remote_mem_list 输出的服务端共享内存列表
     * @param mem_tag_list 输出的服务端共享内存标识列表
     * @param list_num 输出的共享内存实际数量
     * @param timeout 请求的超时时间（秒）
     * @return 操作结果状态码
     */
    hccl::HcclResult HixlCSClientGetRemoteMem(ClientHandle client_handle,
                                              hccl::HcclMem **remote_mem_list,
                                              char **mem_tag_list,
                                              uint32_t *list_num,
                                              uint32_t timeout);

    /**
     * @brief 销毁Client实例并释放资源
     * @param client_handle 客户端句柄
     * @return 操作结果状态码
     */
    hccl::HcclResult HixlCSClientDestroy(ClientHandle client_handle);
} // namespace hixl

#endif // HIXL_API_H
